/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package occho.data;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import occho.model.Usuario;

/**
 *
 * @author Jorge,Migue
 */
public interface UsuarioDAO {
    
    /**
     * Inserta un usuario en la base de datos
     * @param usuario
     * @return true si el usuario se inserta correctamente
     * @throws SQLException
     * @throws ClassNotFoundException  
     */
    public boolean insertarUsuario(Usuario usuario) throws SQLException, ClassNotFoundException;
    
    /**
     * Elimina un usuario de la base de datos
     * @param usuario
     * @return true si el usuario se elimina correctamente
     * @throws SQLException 
     */
    public boolean eliminarUsuario(Usuario usuario) throws SQLException;
    
    /**
     * Modifica un usuario de la base de datos
     * @param usuario
     * @return true si el usuario se modifica correctamente
     * @throws SQLException 
     */
    public boolean modificarUsuario(Usuario usuario) throws SQLException;
    
    /**
     * Selecciona un usuario de la base de datos
     * @param email
     * @return el usuario que coincida en email. Si no hay un 
     * usuario con esos datos, devuelve null.
     * @throws SQLException
     * @throws ClassNotFoundException  
     */
    public Usuario seleccionarUsuario(String email) throws SQLException, ClassNotFoundException;
    
    /**
     * Comprueba si existe un usuario
     * @param email
     * @return true si existe el usuario.
     * @throws SQLException
     * @throws ClassNotFoundException  
     */
    public boolean existeUsuario(String email) throws SQLException, ClassNotFoundException;
    
    /**
     * Selecciona todos los usuarios de un tipo
     * @param tipo
     * @return List<Usuario>
     * @throws SQLException 
     */
    public List<Usuario> seleccionarUsuarios(String tipo) throws SQLException;
 
    /**
     * Selecciona un usuario de la base de datos
     * @param email 
     * @return el usuario que coincida en email. Si no hay un 
     * usuario con esos datos, devuelve null.
     * @throws SQLException
     * @throws ClassNotFoundException  
     */
    public Usuario selectAlumno(String email) throws SQLException, ClassNotFoundException ;
     
    
    /**
     * Comprueba si un alumno está logueado(activo) en este momento.
     * @param email
     * @return true si está activo, false en caso contrario
     * @throws SQLException
     * @throws ClassNotFoundException  
     */
    public boolean estaLogueadoAlumno(String email) throws SQLException, ClassNotFoundException ;
    
     /**
     * Actualiza el atributo activo de la bbdd para el usuario.
     * @param email valor
     * @param valor 
     * @return true si está activo, false en caso contrario
     * @throws SQLException
     * @throws ClassNotFoundException  
     */
    public boolean setActivo(String email, boolean valor) throws SQLException, ClassNotFoundException;
    
    /**
     * Devuelva una lista de alumnos cuyos ids estan en la lista de ids.
     * @param listaIdsAlumnos
     * @return ArrayList<Usuario>
     * @throws SQLException
     */
    public ArrayList<Usuario> seleccionarAlumnos(ArrayList<Integer> listaIdsAlumnos) throws SQLException;
}
